<?php namespace app\wechat\controller;

use houdunwang\route\Controller;
use houdunwang\wechat\WeChat;
use system\model\Keywords;
use system\model\Module;
use system\model\Config;

class Api extends Controller
{
    //动作
    public function __construct()
    {
        WeChat::valid();
    }

    public function handler()
    {
//测试消息发送
//        实例化微信中的message类
        $instance = WeChat::instance('message');
//	$instance->text('你好，18年的坚持...');
//获取表中的关注信息
        $wechat_system_response = Config::find(1)->wechat_system_response;
//        p($wechat_system_response);
//        {"csrf_token":"","welcome":"你好啊","default_message":"真棒"}
//        将其转化为数组
        $wechat_system_response = json_decode($wechat_system_response, true);

//判断是否是关注事件
        if ($instance->isSubscribeEvent()) {
            //向用户回复消息
            $instance->text($wechat_system_response['welcome']);
        }


//        获取粉丝发来的信息
        $content = $instance->Content;
//        查看粉丝发来的内容 关键词库内是否有对应得关键词
        $this->parseKeywords($content);
        //默认回复
        //获取默认回复的消息内容default_message
        //如果你默认回复消息，恰好是一个关键词，那么当你随便输入的时候，回复该关键词对应的内容
        $this->parseKeywords($wechat_system_response['default_message']);
        //菜单的点击事件
//		$button = WeChat::instance('button');
//		if ($button->isClickEvent()) {
//			//获取消息内容
//			$message = $button->getMessage();
//			//向用户回复消息
//			$button->text("点击了菜单,EventKey: {$message->EventKey}");

        //去除默认消息进行恢复给粉丝
        $instance->text($wechat_system_response['default_message']);
//		}

    }

    protected function parseKeywords($content)
    {
        //将粉丝发来的消息，原样回复回复，测试
        //$instance->text($content);
        //2.2在关键词表中根据关键词找模块，pluck是获取单一一个字段的值
        //$module = Keywords::where( 'keywords' , $content )->pluck( 'module' );
        //相当于：select name from student
        $keywords = Keywords::where('keywords', $content)->first();

        if ($keywords) {
            //2.3模块表中查找2.2中的模块是不是系统模块
            $module_is_system = Module::where('module_name', $keywords['module'])->pluck('module_is_system');
            //$instance->text($module_is_system);
            //$class = "module\base\system\Processor"
            //$class = "addons\pic\system\Processor";
            $class = ($module_is_system == 1 ? 'module' : 'addons') . '\\' . $keywords['module'] . '\system\Processor';

//
            return call_user_func_array([new $class, 'handler'], [$keywords['module_id']]);
        }
    }
}
